// 导入express 框架
const express = require('express')
// 导入body-parser中间件
var bodyparser = require('body-parser')
const app = express()

// multer 中间件  用于处理 multipart/form-data 类型的表单数据 主要用于文件上传
const multer = require('multer')
// 在server 服务端常见一个public文件 在public文件夹下创建一个uploads文件夹
// 用于存放上传的文件
// 导入multer中间件
const upload = multer({ dest: 'public/upload/' })

app.use(upload.any())
// 将uploads目录作为静态资源目录 静态托管
app.use(express.static('./public'))

// 导入并配置cors中间件
// 解决跨域
// 导入cors
const cors = require('cors')
// 全局挂载
app.use(cors())
app.use(bodyparser.json())
app.use((req, res, next) => {
  res.cc = (err, status = 1) => {
    // 状态值 1 为失败， 0 为成功
    res.send({
      status,
      // 判断error是否是Error对象
      // 如果是Error对象，直接将error对象的message属性作为错误提示
      // 如果不是Error对象，就将error作为错误提示
      message: err instanceof Error ? err.message : err
    })
  }
  next()
})

app.use(bodyparser.urlencoded({ extended: false }))

// 导入配置文件
const jwtconfig = require('./jwt_config/index')
// const { expressjwt: expressjwt } = require('express-jwt')
// // 配置解析token的中间件
// app.use(
//   expressjwt({
//     secret: jwtconfig.jwtSecretKey,
//     algorithms: ['HS256']
//   }).unless({ path: [/^\/api\//] })
// )
// 配置全局错误处理中间件
// 配置解析token的中间件

// 导入并使用登录路由模块
const loginRouter = require('./router/login')
app.use('/api', loginRouter)
// 导入并使用用户信息路由模块
const userInfoRouter = require('./router/userInfo')
app.use('/user', userInfoRouter)
// 对不符合joi规则的情况进行报错
app.use((err, req, res, next) => {
  if (err instanceof Joi.ValidationError) {
    res.send({
      status: 1,
      message: '输入的数据不符合验证规则'
    })
  }
})

app.listen(3007, () => {
  console.log(`Server is running on port 3007`)
})
